This invention relates generally to a system and method for remotely monitoring a plurality of computer-based systems and in particular to a system and method for monitoring a software application or the microprocessor on a distributed set of computer-based systems in order to determine information, such as defects or usage patterns, about the software application, the system software, or any hardware that is part of or is connected to the computer-based system.
The tremendous expansion of the Internet has led to the expansion of the number features in software applications. The expansion of the Internet has also necessitated the more rapid development of various software applications and has changed various software development methodologies. For example, the technique for beta testing software applications has drastically changed. Prior to the proliferation of the Internet, a company might beta test a software application by distributing the software application by floppy disk to a limited number of beta testers since it was relatively inexpensive to do due to the costs of the disks. With the Internet, the process of beta testing requires only that the developer place the beta software application on its web site and then anyone interested in beta testing the software application may do so with almost no expense to the developer.
In order to properly beta test a software application and for the developer to benefit from the beta test, it is desirable to provide some medium for the beta testers to communicate with the developer who can gather the beta testers' bug reports and comments and correct any bugs This process was typically accomplished by a beta test coordinator who was responsible for gathering the relevant information and routing the bug reports to the appropriate engineers. No conventional system provides for the automated retrieval of the bug reports and comments from beta testers.
It is also desirable to be able to query various users to determine which features of a software application are being utilized and which ones are not being utilized. In one conventional system, pieces of code may be inserted into the software application that track the number of times a user accesses certain functions within the software application. Then, at some predetermined time, the number of accesses for each function may be uploaded to a central system that processes the gathered data. This conventional system is invasive since additional code must be incorporated into the software application. In addition, most programmers and developers do not want to add code into their software application in order to track the number of times each function in the software application is used.
In order to provide quality assurance (QA) feedback to a user of the software application, it is additionally desirable to be able to recreate a user's problem so that the Quality Assurance person can quickly help the user. In some conventional systems, the Quality Assurance person attempts to recreate the problem based on a user's recollections of the events, the user actions within the software application, such as entering the print routine, or the keystrokes that caused the error. This is very often difficult to accomplish since either the user may not remember all of the steps he took that caused the problem or the problem only manifests itself on the user's computer due to the configuration of the user's computer. In addition, determining the exact configuration of the user's computer is sometimes difficult since the user may not remember, for example, the type of graphics card that he installed in his computer. Therefore, it is desirable to be able to determine the configuration of a user's computer and capture information about the user's actions in order to help the Quality Assurance process.
For a software application being developed, it is often necessary to debug the software application. Some conventional systems permit a master computer to be used to debug a software application running on a single target computer. It is desirable to be able to permit a software application on a plurality of client computers to be simultaneously debugged.
In addition, it is desirable to be able to remotely monitor the functioning of a microprocessor. One conventional system is an internal circuit emulator (ICE) which replaces a microprocessor in a system being tested in order to help track what is occurring inside of the processor. An ICE, however, cannot be used to remotely monitor a microprocessor. No conventional system exists for remotely monitoring a plurality of client computers simultaneously to gather information about the client computers or software applications being executed by the client computers. Thus, there is a need for system and method for remotely monitoring a plurality of computer-based systems which avoid these and other problems of known systems and methods, and it is to this end that the present invention is directed.